﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Web.Security;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
using System.Data;

using System.IO;
using System.Text;

public partial class MetaDataDicionario : System.Web.UI.Page
{
    ConexaoMDBD Command = new ConexaoMDBD();
    PopulaDropDownList PopulaDDL = new PopulaDropDownList();
    
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Popula_ddl_cod_ambi();
            Popula_ddl_cod_sist();

            ddl_cod_ambi.BackColor = System.Drawing.Color.LightGray;
            ddl_cod_usre.BackColor = System.Drawing.Color.LightGray;
            ddl_cod_sist.BackColor = System.Drawing.Color.LightGray;
            txt_nome_objeto.BackColor = System.Drawing.Color.LightGray;
            txt_descricao_objeto.BackColor = System.Drawing.Color.LightGray;
            hdf_page_resultado.Value = "0";
        }
    }
    protected void Popula_ddl_cod_ambi()
    {
        PopulaDDL.dsResultado("PACK_APP_POPULA_DDL.PROC_APP_POPULA_DDL_COD_AMBI", ddl_cod_ambi, "COD_AMBI", "DESC_AMBI", null);
    }

    protected void Popula_ddl_cod_sist()
    {
        PopulaDDL.dsResultado("PACK_APP_POPULA_DDL.PROC_APP_POPULA_DDL_COD_SIST", ddl_cod_sist, "COD_SIST", "NOME_MODELO", null);
    }

    protected void ddl_cod_ambi_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ddl_cod_ambi.SelectedValue != "0")
        {
            PopulaDDL.dsResultado("PACK_APP_POPULA_DDL.PROC_APP_POPULA_DDL_COD_USRE", ddl_cod_usre, "COD_SCHM", "NOME_USER", ddl_cod_ambi.SelectedValue.ToString());
            ddl_cod_usre.SelectedValue = "0";
        }
        else
        {
            ddl_cod_usre.DataSource = null;
            ddl_cod_usre.DataBind();
        }
    }

    protected void btn_pesquisar_Command(object sender, CommandEventArgs e)
    {
        hdf_page_resultado.Value = "0";
        gdv_resultado.PageIndex = 0;
        ValidaParametrosPopula_gdv_resultado();
    }

    protected void ValidaParametrosPopula_gdv_resultado()
    {
        String Ambiente = ddl_cod_ambi.SelectedValue == "0" ? null : ddl_cod_ambi.SelectedItem.ToString();
        String Usuario = ddl_cod_usre.SelectedValue == "0" ? null : ddl_cod_usre.SelectedItem.ToString();
        String Sistema = ddl_cod_sist.SelectedValue == "0" ? null : ddl_cod_sist.SelectedItem.ToString();
        String NomeObjeto = txt_nome_objeto.Text == "0" ? null : txt_nome_objeto.Text.ToUpper();
        String DescricaoObjeto = txt_descricao_objeto.Text == "0" ? null : txt_descricao_objeto.Text.ToUpper();
        String NomeColuna = txt_nome_coluna.Text == "0" ? null : txt_nome_coluna.Text.ToUpper();
        String DescricaoColuna = txt_descricao_coluna.Text == "0" ? null : txt_descricao_coluna.Text.ToUpper();

        Popula_gdv_resultado(ddl_nome_tipo_objt.SelectedItem.ToString(), Ambiente, Usuario, Sistema, NomeObjeto, DescricaoObjeto, NomeColuna, DescricaoColuna);
    }

    protected void Popula_gdv_resultado(String TipoObjeto, String Ambiente, String Usuario, String Sistema, String NomeObjeto, String DescricaoObjeto, String NomeColuna, String DescricaoColuna)
    {
        DataSet dsResultado = new DataSet();

        //if (TipoObjeto != "") //hdf_page_resultado.Value == "0")
        if (hdf_page_resultado.Value == "0")
        {
            OracleCommand cmdOP = Command.cmdMDBD("");

            switch (TipoObjeto)
            {
                case "TABELAS":
                    cmdOP.CommandText = "PACK_APP_POPULA_GDV.PROC_APP_BUSCA_TABELAS";
                    cmdOP.Parameters.Add(new OracleParameter("V_AMBIENTE", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Ambiente;
                    cmdOP.Parameters.Add(new OracleParameter("V_USUARIO", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Usuario;
                    cmdOP.Parameters.Add(new OracleParameter("V_SISTEMA", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Sistema;
                    cmdOP.Parameters.Add(new OracleParameter("V_TABELA", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = NomeObjeto;
                    cmdOP.Parameters.Add(new OracleParameter("V_DESCRICAO", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = DescricaoObjeto;
                    cmdOP.Parameters.Add(new OracleParameter("V_RESULTADO_SAIDA", OracleDbType.RefCursor, ParameterDirection.Output));
                    break;

                case "TABELAS REPETIDAS EM MÓDULOS":
                    cmdOP.CommandText = "PACK_APP_POPULA_GDV.PROC_APP_BUSCA_TABELAS_MODULOS";
                    cmdOP.Parameters.Add(new OracleParameter("V_TABELA", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = NomeObjeto;
                    cmdOP.Parameters.Add(new OracleParameter("V_RESULTADO_SAIDA", OracleDbType.RefCursor, ParameterDirection.Output));
                    break;

                case "COLUNAS":
                    cmdOP.CommandText = "PACK_APP_POPULA_GDV.PROC_APP_BUSCA_COLUNAS";
                    cmdOP.Parameters.Add(new OracleParameter("V_AMBIENTE", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Ambiente;
                    cmdOP.Parameters.Add(new OracleParameter("V_USUARIO", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Usuario;
                    cmdOP.Parameters.Add(new OracleParameter("V_SISTEMA", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Sistema;
                    cmdOP.Parameters.Add(new OracleParameter("V_TABELA", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = NomeObjeto;
                    cmdOP.Parameters.Add(new OracleParameter("V_COLUNA", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = NomeColuna;
                    cmdOP.Parameters.Add(new OracleParameter("V_DESCRICAO_COLUNA", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = DescricaoColuna;
                    cmdOP.Parameters.Add(new OracleParameter("V_RESULTADO_SAIDA", OracleDbType.RefCursor, ParameterDirection.Output));
                    break;

                case "VIEWS":
                    cmdOP.CommandText = "PACK_APP_POPULA_GDV.PROC_APP_BUSCA_VIEWS";
                    cmdOP.Parameters.Add(new OracleParameter("V_AMBIENTE", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Ambiente;
                    cmdOP.Parameters.Add(new OracleParameter("V_USUARIO", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Usuario;
                    cmdOP.Parameters.Add(new OracleParameter("V_SISTEMA", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Sistema;
                    cmdOP.Parameters.Add(new OracleParameter("V_VIEW", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = NomeObjeto;
                    cmdOP.Parameters.Add(new OracleParameter("V_RESULTADO_SAIDA", OracleDbType.RefCursor, ParameterDirection.Output));
                    break;

                case "PACKAGES":
                    cmdOP.CommandText = "PACK_APP_POPULA_GDV.PROC_APP_BUSCA_PACKAGES";
                    cmdOP.Parameters.Add(new OracleParameter("V_AMBIENTE", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Ambiente;
                    cmdOP.Parameters.Add(new OracleParameter("V_USUARIO", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Usuario;
                    cmdOP.Parameters.Add(new OracleParameter("V_SISTEMA", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Sistema;
                    cmdOP.Parameters.Add(new OracleParameter("V_PACKAGE", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = NomeObjeto;
                    cmdOP.Parameters.Add(new OracleParameter("V_RESULTADO_SAIDA", OracleDbType.RefCursor, ParameterDirection.Output));
                    break;

                case "PROCEDURES":
                    cmdOP.CommandText = "PACK_APP_POPULA_GDV.PROC_APP_BUSCA_PROCEDURES";
                    cmdOP.Parameters.Add(new OracleParameter("V_AMBIENTE", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Ambiente;
                    cmdOP.Parameters.Add(new OracleParameter("V_USUARIO", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Usuario;
                    cmdOP.Parameters.Add(new OracleParameter("V_SISTEMA", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Sistema;
                    cmdOP.Parameters.Add(new OracleParameter("V_PROCEDURE", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = NomeObjeto;
                    cmdOP.Parameters.Add(new OracleParameter("V_RESULTADO_SAIDA", OracleDbType.RefCursor, ParameterDirection.Output));
                    break;

                case "TRIGGERS":
                    cmdOP.CommandText = "PACK_APP_POPULA_GDV.PROC_APP_BUSCA_TRIGGERS";
                    cmdOP.Parameters.Add(new OracleParameter("V_AMBIENTE", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Ambiente;
                    cmdOP.Parameters.Add(new OracleParameter("V_USUARIO", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Usuario;
                    cmdOP.Parameters.Add(new OracleParameter("V_SISTEMA", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Sistema;
                    cmdOP.Parameters.Add(new OracleParameter("V_TRIGGER", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = NomeObjeto;
                    cmdOP.Parameters.Add(new OracleParameter("V_RESULTADO_SAIDA", OracleDbType.RefCursor, ParameterDirection.Output));
                    break;

                case "SEQUENCES":
                    cmdOP.CommandText = "PACK_APP_POPULA_GDV.PROC_APP_BUSCA_SEQUENCES";
                    cmdOP.Parameters.Add(new OracleParameter("V_AMBIENTE", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Ambiente;
                    cmdOP.Parameters.Add(new OracleParameter("V_USUARIO", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Usuario;
                    cmdOP.Parameters.Add(new OracleParameter("V_SISTEMA", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Sistema;
                    cmdOP.Parameters.Add(new OracleParameter("V_SEQUENCE", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = NomeObjeto;
                    cmdOP.Parameters.Add(new OracleParameter("V_RESULTADO_SAIDA", OracleDbType.RefCursor, ParameterDirection.Output));
                    break;

                case "SINÔNIMOS":
                    cmdOP.CommandText = "PACK_APP_POPULA_GDV.PROC_APP_BUSCA_SINONIMOS";
                    cmdOP.Parameters.Add(new OracleParameter("V_AMBIENTE", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Ambiente;
                    cmdOP.Parameters.Add(new OracleParameter("V_USUARIO", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Usuario;
                    cmdOP.Parameters.Add(new OracleParameter("V_SISTEMA", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = Sistema;
                    cmdOP.Parameters.Add(new OracleParameter("V_SINONIMO", OracleDbType.Varchar2, 255, ParameterDirection.Input)).Value = NomeObjeto;
                    cmdOP.Parameters.Add(new OracleParameter("V_RESULTADO_SAIDA", OracleDbType.RefCursor, ParameterDirection.Output));
                    break;
            }

            OracleDataAdapter daResultado = new OracleDataAdapter();
            daResultado.SelectCommand = cmdOP;

            daResultado.Fill(dsResultado, "Resultado");

            Session["ses_resultado_busca"] = dsResultado;

            cmdOP.Connection.Dispose();
            cmdOP.Connection.Close();

            hdf_page_resultado.Value = "1";
        }
        else
        {
            dsResultado = (DataSet)Session["ses_resultado_busca"];
        }

        gdv_resultado.AllowPaging = true;
        gdv_resultado.PageSize = 20;

        hdf_resultado.Value = dsResultado.Tables["Resultado"].Rows.Count.ToString();

        gdv_resultado.DataSource = dsResultado.Tables["Resultado"];
        gdv_resultado.DataBind();

        if (gdv_resultado.Rows.Count > 0)
        {
            gdv_resultado.HeaderRow.Cells[0].Visible = false;

            foreach (GridViewRow gvr_resultado in gdv_resultado.Rows)
            {
                gvr_resultado.Cells[0].Visible = false;

                switch (TipoObjeto)
                {
                    case "TABELAS":
                        gvr_resultado.Cells[8].Text = string.Format("{0:N0}", Int32.Parse(gvr_resultado.Cells[8].Text));
                        gvr_resultado.Cells[8].HorizontalAlign = HorizontalAlign.Right;

                        gvr_resultado.Cells[9].Text = string.Format("{0:N2}", Decimal.Parse(gvr_resultado.Cells[9].Text));
                        gvr_resultado.Cells[9].HorizontalAlign = HorizontalAlign.Right;
                        break;
                }
            }
        }

        if (hdf_resultado.Value == "0")
        {
            lbl_resultado.Text = " Não foram encontrados resultados para sua busca";
        }
        else
        {
            lbl_resultado.Text = " Foram encontradas " + hdf_resultado.Value + " " + TipoObjeto + " para sua busca";

            if (Int32.Parse(hdf_resultado.Value) > 20)
            {
                lbl_resultado.Text = lbl_resultado.Text + " (mostrando de 1 até 20)";
            }
            else
            {
                lbl_resultado.Text = lbl_resultado.Text + " (mostrando de 1 até " + hdf_resultado.Value + ")";
            }

            if (Request.QueryString["busca"] == "" || Request.QueryString["busca"] == null)
            {
                if (hdf_resultado.Value == "1")
                {
                }
                else
                {
                }
            }
            else
            {
                if (hdf_resultado.Value == "1")
                {
                }
                else
                {
                }
            }
        }
    }

    protected void gdv_resultado_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='Yellow'");

            if (e.Row.RowIndex % 2 != 0)
            {
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='LightGrey'");
            }
            else
            {
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='White'");
            }
        }
    }

    protected void gdv_resultado_PageIndexChanged(object sender, EventArgs e)
    {
        ValidaParametrosPopula_gdv_resultado();

        if (gdv_resultado.PageIndex == 0)
        {
            if (gdv_resultado.Rows.Count > 20)
            {
                lbl_resultado.Text = lbl_resultado.Text.Substring(1, lbl_resultado.Text.IndexOf("(", 1) - 2) + " (mostrando de 1 até 20)";
            }
            else
            {
                lbl_resultado.Text = lbl_resultado.Text.Substring(1, lbl_resultado.Text.IndexOf("(", 1) - 2) + " (mostrando de 1 até " + gdv_resultado.Rows.Count + ")";
            }
        }
        else
        {
            if (gdv_resultado.PageCount == gdv_resultado.PageIndex + 1)
            {
                lbl_resultado.Text = lbl_resultado.Text.Substring(1, lbl_resultado.Text.IndexOf("(", 1) - 2) + " (mostrando de " + ((gdv_resultado.PageIndex * 20) + 1) + " até " + hdf_resultado.Value + ")";
            }
            else
            {
                lbl_resultado.Text = lbl_resultado.Text.Substring(1, lbl_resultado.Text.IndexOf("(", 1) - 2) + " (mostrando de " + ((gdv_resultado.PageIndex * 20) + 1) + " até " + (gdv_resultado.PageIndex + 1) * 20 + ")";
            }
        }
    }

    protected void gdv_resultado_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gdv_resultado.PageIndex = e.NewPageIndex;
    }

    protected void ddl_nome_tipo_objt_SelectedIndexChanged(object sender, EventArgs e)
    {
        ddl_nome_tipo_objt.BackColor = System.Drawing.Color.White;
        ddl_cod_ambi.BackColor = System.Drawing.Color.White;
        ddl_cod_usre.BackColor = System.Drawing.Color.White;
        ddl_cod_sist.BackColor = System.Drawing.Color.White;
        txt_nome_objeto.BackColor = System.Drawing.Color.White;
        txt_nome_coluna.BackColor = System.Drawing.Color.White;
        txt_descricao_objeto.BackColor = System.Drawing.Color.White;
        txt_descricao_coluna.BackColor = System.Drawing.Color.White;

        switch (ddl_nome_tipo_objt.SelectedItem.Text)
        {
            case "TABELAS":
                ddl_cod_ambi.BackColor = System.Drawing.Color.LightGray;
                ddl_cod_usre.BackColor = System.Drawing.Color.LightGray;
                ddl_cod_sist.BackColor = System.Drawing.Color.LightGray;
                txt_nome_objeto.BackColor = System.Drawing.Color.LightGray;
                txt_descricao_objeto.BackColor = System.Drawing.Color.LightGray;
                break;

            case "TABELAS REPETIDAS EM MÓDULOS":
                //ddl_nome_tipo_objt.BackColor = System.Drawing.Color.LightGreen;
                txt_nome_objeto.BackColor = System.Drawing.Color.LightGray;
                break;

            case "COLUNAS":
                ddl_cod_ambi.BackColor = System.Drawing.Color.LightGray;
                ddl_cod_usre.BackColor = System.Drawing.Color.LightGray;
                ddl_cod_sist.BackColor = System.Drawing.Color.LightGray;
                txt_nome_objeto.BackColor = System.Drawing.Color.LightGray;
                txt_nome_coluna.BackColor = System.Drawing.Color.LightGray;
                txt_descricao_coluna.BackColor = System.Drawing.Color.LightGray;
                break;

            case "VIEWS":
                ddl_cod_ambi.BackColor = System.Drawing.Color.LightGray;
                ddl_cod_usre.BackColor = System.Drawing.Color.LightGray;
                ddl_cod_sist.BackColor = System.Drawing.Color.LightGray;
                txt_nome_objeto.BackColor = System.Drawing.Color.LightGray;
                break;

            case "PACKAGES":
                ddl_cod_ambi.BackColor = System.Drawing.Color.LightGray;
                ddl_cod_usre.BackColor = System.Drawing.Color.LightGray;
                ddl_cod_sist.BackColor = System.Drawing.Color.LightGray;
                txt_nome_objeto.BackColor = System.Drawing.Color.LightGray;
                break;

            case "PROCEDURES":
                ddl_cod_ambi.BackColor = System.Drawing.Color.LightGray;
                ddl_cod_usre.BackColor = System.Drawing.Color.LightGray;
                ddl_cod_sist.BackColor = System.Drawing.Color.LightGray;
                txt_nome_objeto.BackColor = System.Drawing.Color.LightGray;
                break;

            case "TRIGGERS":
                ddl_cod_ambi.BackColor = System.Drawing.Color.LightGray;
                ddl_cod_usre.BackColor = System.Drawing.Color.LightGray;
                ddl_cod_sist.BackColor = System.Drawing.Color.LightGray;
                txt_nome_objeto.BackColor = System.Drawing.Color.LightGray;
                break;

            case "SEQUENCES":
                ddl_cod_ambi.BackColor = System.Drawing.Color.LightGray;
                ddl_cod_usre.BackColor = System.Drawing.Color.LightGray;
                ddl_cod_sist.BackColor = System.Drawing.Color.LightGray;
                txt_nome_objeto.BackColor = System.Drawing.Color.LightGray;
                break;

            case "SINÔNIMOS":
                ddl_cod_ambi.BackColor = System.Drawing.Color.LightGray;
                ddl_cod_usre.BackColor = System.Drawing.Color.LightGray;
                ddl_cod_sist.BackColor = System.Drawing.Color.LightGray;
                txt_nome_objeto.BackColor = System.Drawing.Color.LightGray;
                break;
        }
    }

    protected void btn_exportar_Command(object sender, CommandEventArgs e)
    {
        GridView gdv_exporta = new GridView();

        DataSet dsResultado = (DataSet)Session["ses_resultado_busca"];

        gdv_exporta.AllowPaging = false;

        gdv_exporta.DataSource = dsResultado.Tables["Resultado"];
        gdv_exporta.DataBind();

        if (gdv_exporta.Rows.Count > 0)
        {
            gdv_exporta.HeaderRow.Cells[0].Visible = false;

            for (Int32 i = 0; i < gdv_exporta.HeaderRow.Cells.Count; i++)
            {
                gdv_exporta.HeaderRow.Cells[i].BackColor = System.Drawing.Color.DarkBlue;
                gdv_exporta.HeaderRow.Cells[i].ForeColor = System.Drawing.Color.White;
                gdv_exporta.HeaderRow.Cells[i].Font.Bold = true;
                gdv_exporta.HeaderRow.Cells[i].BorderStyle = BorderStyle.Solid;
                gdv_exporta.HeaderRow.Cells[i].BorderColor = System.Drawing.Color.Black;
            }

            foreach (GridViewRow gvr_exporta in gdv_exporta.Rows)
            {
                for (Int32 i = 0; i < gvr_exporta.Cells.Count; i++)
                {
                    gvr_exporta.Cells[0].Visible = false;
                    gvr_exporta.Cells[i].Wrap = false;
                    gvr_exporta.Cells[i].BorderStyle = BorderStyle.Solid;
                    gvr_exporta.Cells[i].BorderColor = System.Drawing.Color.Black;
                }

                if (ddl_nome_tipo_objt.SelectedItem.Text == "TABELAS")
                {
                    gvr_exporta.Cells[8].Text = string.Format("{0:N0}", Int32.Parse(gvr_exporta.Cells[8].Text));
                    gvr_exporta.Cells[8].HorizontalAlign = HorizontalAlign.Right;

                    gvr_exporta.Cells[9].Text = string.Format("{0:N2}", Decimal.Parse(gvr_exporta.Cells[9].Text));
                    gvr_exporta.Cells[9].HorizontalAlign = HorizontalAlign.Right;
                }
            }

            GridViewExportUtil.Export("MDBD.xls", gdv_exporta); ;
        }
    }
}
